package com.example.websocketdemo.config;

import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.http.server.ServletServerHttpRequest;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.server.HandshakeInterceptor;

import java.util.Map;

/**
 * SockJS 握手进行及鉴权
 *
 * @author Cary
 * @date 2025-03-26
 */
public class AuthHandshakeInterceptor implements HandshakeInterceptor {
  @Override
  public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception {
    // 获取参数中的认证信息（如 JWT token）
    ServletServerHttpRequest req = (ServletServerHttpRequest) request;
    // 根据token认证用户，不通过返回拒绝握手
    String token = req.getServletRequest().getParameter("token");
    // 如果没有 token 或 token 无效，拒绝连接
    return token != null && isValidToken(token);
  }

  @Override
  public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) {
    // 可选，处理握手后的事情
  }

  private boolean isValidToken(String token) {
    // 验证 token 是否有效，可能需要通过 JWT 库解码并验证
    return token.equals("valid_token_example");
  }

}
